/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controle.gui.frames.internos;

import controle.gui.frames.ControleFramePrincipal;
import controle.gui.utils.EnabledGUIElements;
import controle.socket.ServidorSocket;
import gui.frames.FramePrincipal;
import gui.frames.internos.IFSincronizacao;
import javax.swing.event.InternalFrameEvent;
import javax.swing.event.InternalFrameListener;
import javax.swing.text.BadLocationException;

/**
 * Classe de Controle da GUI IFSincronização
 *
 * @author Maycon Fernando Silva Brito @email mayconfsbrito@gmail.com
 */
public class ControleSincronizacao {

    /*
     * Variáveis da Classe
     */
    private IFSincronizacao frame = null;
    private ServidorSocket servidor = null;
    private Thread threadServidor = null;

    //Contrutor da classe
    public ControleSincronizacao(IFSincronizacao frame) {
        this.frame = frame;

    }

    public void inicializa() {
        this.servidor = new ServidorSocket(this);
        frame.centraliza();
        limparGUI();

        //Adiciona evento de quando a janela é fechada
        frame.addInternalFrameListener(new InternalFrameListener() {

            @Override
            public void internalFrameOpened(InternalFrameEvent e) {
            }

            @Override
            public void internalFrameClosing(InternalFrameEvent e) {
                ControleFramePrincipal.qtdIFSinc--;
                paraConexao();
            }

            @Override
            public void internalFrameClosed(InternalFrameEvent e) {
            }

            @Override
            public void internalFrameIconified(InternalFrameEvent e) {
            }

            @Override
            public void internalFrameDeiconified(InternalFrameEvent e) {
            }

            @Override
            public void internalFrameActivated(InternalFrameEvent e) {
            }

            @Override
            public void internalFrameDeactivated(InternalFrameEvent e) {
            }
        });

    }

    public void limparGUI() {
        frame.getTextLog().setText("");

        guiAtiva(false);
    }

    public void guiAtiva(boolean ativa) {

        if (ativa) {
            EnabledGUIElements.enabledJComponent(frame.getTextLog(), frame.getButtonParar());
            EnabledGUIElements.disabledJComponent(frame.getButtonConectar());

        } else {
            EnabledGUIElements.disabledJComponent(frame.getTextLog(), frame.getButtonParar());
            EnabledGUIElements.enabledJComponent(frame.getButtonConectar());

        }

    }

    /**
     * Disponibiliza o servidor para realizar a conexão via Socket
     */
    public void abreConexao() {

        frame.getTextLog().setText("");
        threadServidor = new Thread(servidor);
        threadServidor.start();
        guiAtiva(true);
        
    }

    /**
     * Imterrompe a conexão socket
     */
    public void paraConexao() {

        if(servidor != null){
            servidor.desconectar();
            
            if(threadServidor != null){
                threadServidor.interrupt();
            }
        }
        
        guiAtiva(false);

    }

    /**
     * Adiciona uma nova mensagem no JTextArea de sincronização
     */
    public void addMessage(String str) {
        frame.getTextLog().setText(frame.getTextLog().getText() + str + "\n");

        try {
            frame.getTextLog().scrollRectToVisible(frame.getTextLog().modelToView(frame.getTextLog().getDocument().getLength()));
        } catch (BadLocationException e) {
            e.printStackTrace();
        }
    }
}
